package superviseur.database;

import java.util.*;
import jcdatabase.*;

/**
 *
 * <p>Titre : Bornes </p>
 * <p>Description :
 * Assure la persistance des donnees relatives aux bornes. Pour chaque borne,
 * sont enregistres dans l'ordre: Nom, numero et url.
 * Les donnees sont stockees dans un fichier: fichierBornes.</p>
 * <p>Copyright : Copyright (c) 2003</p>
 * @author Gilles Petot
 * @version 1.0
 */

//Le nom du fichier est fourni par la servlet (ParkingInitServlet)
//L'implementation peut etre modifiee afin d'acceder a une vraie base de donnees.


public class TBornes
{

    static JCTable bornes = null;

    /**
     * Constructeur
     * @param fichierBornes Le nom du fichier
     */
    public TBornes(String fichierBornes)
    {
	if (bornes == null)
	{
	    bornes = new JCTable(fichierBornes);
	    nettoie();
	}
    }

    public void destroy()
    {
	bornes.destroy();
	bornes = null;
    }

    /**
     * Utile lors d'un crash du superviseur
     * Efface les enregistrements des bornes simulees en applets
     */
    private void nettoie()
    {
	boolean result = false;
	JCRow[] r = bornes.select();
	int l = r.length;
	for (int i = 0; i < l; i++)
	{
	    int numeroBorne = r[i].getInt("NUM");
	    boolean ok = (((numeroBorne >=20) & (numeroBorne <= (20 + 12))) | ((numeroBorne >= (20 + 50)) & (numeroBorne <= (20 + 12 + 50))));
	    if (ok)
	    {
		deleteBorneNumero(numeroBorne);
	    }
	}
    }

    public boolean isBorneEnregistree(int numeroBorne)
    {
	boolean result = false;
	JCRow[] r = bornes.select();
	int l = r.length;
	for (int i = 0; i < l; i++)
	{
	    int numero = r[i].getInt("NUM");
	    if (numero == numeroBorne)
	    {
		result = true;
		break;
	    }
	}
	return result;
    }

    public Vector getAllBornes()
    {
	Vector result = new Vector();
	JCRow[] r = bornes.select();
	int l = r.length;
	for (int i = 0; i < l; i++)
	{
	    Vector row = new Vector(3);
	    row.add(r[i].getString("NAME"));
	    row.add(new Integer(r[i].getInt("NUM")));
	    row.add(r[i].getString("URL"));
	    result.add(row);
	}
	return result;
    }

    public int getNombreBornes()
    {
	JCRow[] r = bornes.select();
	return r.length;
    }

    public boolean addBorne(String nom, int numero, String url)
    {
	boolean result = false;
	JCRow[] a = bornes.select();
	if (a.length < 24)
	{
	    JCRow[] i = bornes.select("NUM", "=", numero);
	    if ( (i.length == 0))
	    {
		JCRow newRow = new JCRow(bornes);
		newRow.setString("NAME", nom);
		newRow.setInt("NUM", numero);
		newRow.setString("URL", url);
		bornes.insert(newRow);
		result = true;
	    }
	}
	return result;
    }


    public boolean deleteBorneNumero(int numero)
    {
	return (bornes.delete("NUM", "=", numero)) == 1;
    }

    public String getNom(int numeroBorne)
    {
	JCRow[] r = bornes.select("NUM", "=", numeroBorne);
	String result = r[0].getString("NAME");
	return result;
    }

    public String getUrl(int numeroBorne)
    {
	JCRow[] r = bornes.select("NUM", "=", numeroBorne);
	String result = r[0].getString("URL");
	return result;
    }

    public int getNumero(String nom)
    {
	JCRow[] r = bornes.select("NAME", "=", nom);
	int result = r[0].getInt("NUM");
	return result;
    }

    public String[] getColonnes()
    {
	String[] result = {"     NOM      ", "NUMERO", "URL"};
	return result;
    }

    public String getTableName()
    {
	return "Bornes actives";
    }

}